# Python 数据结构之列表（List）

# 列表（List）
# 列表是 Python 中最常用的数据结构之一。列表可以存储多个元素，每个元素可以是任意类型。
# 列表中的元素可以通过索引来访问，索引是从 0 开始的整数。

# 列表方法
# 列表中可以使用以下方法：
# append()：在列表末尾追加元素。
# clear()：清空列表。
# copy()：复制列表。
# count()：返回指定元素在列表中出现的次数。
# extend()：在列表末尾追加另一个列表。
# index()：返回指定元素在列表中首次出现的索引。
# insert()：在指定位置插入元素。
# pop()：弹出指定位置的元素，并返回该元素的值。
# remove()：删除指定元素。
# reverse()：反转列表。
# sort()：对列表进行排序。


# 列表函数
# 列表中可以使用以下函数：
# len()：返回列表的长度。
# max()：返回列表中的最大值。
# min()：返回列表中的最小值。
# sum()：返回列表中所有元素的和。
# sorted()：对列表进行排序，并返回排序后的列表。
# tuple()：将列表转换为元组。
# list()：将元组转换为列表。
# str()：将列表转换为字符串。
# range()：返回一个整数列表。
# zip()：将多个列表组合为一个列表。
# enumerate()：返回一个索引-元素对列表。
# reversed()：返回一个反转的迭代器。
# filter()：过滤列表中的元素。
# map()：对列表中的元素进行映射。
# reduce()：对列表中的元素进行归约。
# any()：判断列表中是否有元素满足条件。
# all()：判断列表中是否所有元素满足条件。
# abs()：返回列表中元素的绝对值。
# round()：对列表中的元素进行四舍五入。
# divmod()：返回商和余数。
print("最大元素:", max([1, 2, 3, 4, 5]))


# 创建空列表
# 列表可以为空，即没有元素。
# 示例：
empty_list = []
print(empty_list)


# 创建列表
# 列表是用方括号 [] 标识，元素之间用逗号隔开。
# 示例：
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'orange']


# 列表生成式
# 列表生成式是一种创建列表的简便方式。
# 示例：
list1 = [x for x in range(1, 6)]    # 循环生成 1 到 5 的整数
list2 = ['apple', 'banana', 'orange'] * 2   # 指定元素重复两次
print(list1, list2, sep='\n')


# 列表推导式
# 列表推导式是一种创建列表的简便方式。
# 示例：
list3 = [x**2 for x in range(1, 6)]    # 循环生成 1 到 5 的整数的平方， x**2 表示 x 的平方
list4 = [fruit.upper() for fruit in fruits]   # 循环生成每个水果的大写形式
print(list3, list4, sep='\n')


# 访问列表元素
# 列表中的元素可以通过索引来访问，索引是从 0 开始的整数。
# 示例：
print(numbers[0])  # 输出 1
print(fruits[1])  # 输出 'banana'


# 修改列表元素
# 列表中的元素可以通过索引来修改，索引也是从 0 开始的整数。
# 示例：
numbers[0] = 100
print(numbers)  # 输出 [100, 2, 3, 4, 5]


# 追加元素
# 列表中可以使用 append() 方法来追加元素到列表的末尾。
# 示例：
fruits.append('grape')
print(fruits)  # 输出 ['apple', 'banana', 'orange', 'grape']


# 插入元素
# 列表中可以使用 insert() 方法来插入元素到指定位置。
# 示例：
fruits.insert(1, 'peach')
print(fruits)  # 输出 ['apple', 'peach', 'banana', 'orange', 'grape']


# 删除元素
# 列表中可以使用 remove() 方法来删除指定元素。
# 示例：
fruits.remove('orange')
print(fruits)  # 输出 ['apple', 'peach', 'banana', 'grape']


# 弹出元素
# 列表中可以使用 pop() 方法来弹出指定位置的元素，并返回该元素的值。
# 示例：
element = fruits.pop(1)
print("位置1的元素为:", element)
print("pop末尾的元素为:", fruits.pop())   # 不指定位置，默认弹出末尾的元素
print("pop后的列表为:", fruits)  # 输出 ['apple', 'banana']


# 列表长度
# 列表中可以使用 len() 方法来获取列表的长度。
# 示例：
print("numbers长度为:", len(numbers))  # 输出 5
print("fruits长度为:", len(fruits))  # 输出 2


# 列表遍历
# 列表中可以使用 for 循环来遍历列表中的元素。
# 示例：
for fruit in fruits:
    print(fruit)


# 列表切片
# 列表中可以使用切片来获取子列表。 语法为 [start:end:step]。
# 示例：
numbers_slice = numbers[1:3]
print("索引1到3的元素为:", numbers_slice)  # 输出 [2, 3]
print("步长为2的切片为:", [1, 2, 3, 4, 5][::2]) # 输出 [1, 3, 5]


# 列表排序
# 列表中可以使用 sort() 方法来对列表进行排序。
# 示例：
fruits.sort()
print("排序后的列表为:", fruits)  # 输出 ['apple', 'banana']


# 列表反转
# 列表中可以使用 reverse() 方法来反转列表。
# 示例：
fruits.reverse()
print("反转后的列表为:", fruits)  # 输出 ['banana', 'apple']


# 列表拼接
# 列表中可以使用 + 运算符来拼接两个列表。
# 示例：
list5 = numbers + [6, 7, 8]
print("拼接后的列表为:", list5)  # 输出 [1, 2, 3, 4, 5, 6, 7, 8]


# 列表元素类型
# 列表中的元素可以是任意类型。
# 示例：
list6 = [1, 'apple', True, 3.14]
print("多类型元素的列表为:", list6)  # 输出 [1, 'apple', True, 3.14]


# 列表嵌套
# 列表中可以嵌套其他列表。
# 示例：
list7 = [1, [2, 3], 4]
print("嵌套的列表为:", list7)  # 输出 [1, [2, 3], 4]


# 列表比较
# 列表中可以使用 == 运算符来比较两个列表是否相等。
# 示例：
list8 = [1, 2, 3]
list9 = [1, 2, 3]
print("list8和list9相等:", list8 == list9)  # 输出 True

import operator
print("list8和list9相等:", operator.eq(list8, list9))  # 输出 True


# 列表复制
# 列表中可以使用 copy() 方法来复制列表。
# 示例：
list10 = list8.copy()
print(list10)  # 输出 [1, 2, 3]


# 列表迭代
# 列表中可以使用 iter() 方法来获取列表的迭代器。
# 示例：
list11 = [1, 2, 3]
it = iter(list11)
print(next(it))  # 输出 1
print(next(it))  # 输出 2
print(next(it))  # 输出 3



